﻿using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using TCC.ControleFluxoDeCaixa.Model.Entities;
using TCC.ControleFluxoDeCaixa.Model.Fluxo;
using TCC.ControleFluxoDeCaixa.Model.Fluxo.TranferenciaEntreContas;

namespace TCC.ControleFluxoDeCaixa.Test
{
    [TestClass]
    public class UnidadeDeTesteTranferenciaDeConta
    {
        [TestInitialize]
        public void SetDataBaseInitialize()
        {
            Database.SetInitializer(new DropCreateDatabaseIfModelChanges<FluxoDeCaixaContext>());
        }
        [TestMethod]
        public void TesteTransferenciaDeValores()
        {
            var contexto = FluxoContextFactory.GetInstance().Create();
            var conta1 = contexto.ContaFinanceiraBancarias.Find(2);
            var conta2 = contexto.ContaFinanceiraBancarias.Find(3);
            
            var primeiroLancamento = new Lancamento()
            {
                Categoria = contexto.Categorias.Find(1),
                DataDoLancamento = DateTime.Now,
                Nome = "TRANSFERÊNCIA DE VALORES ENTRE AS CONTAS  "
                + conta1 + " " + conta2 + " " + "Valor Transferido: " + 500
            };
            primeiroLancamento.Movimentos.Add(new Movimento()
            {
                Lancamento = primeiroLancamento,
                DataDoMovimento = DateTime.Now,
                TipoDeMovimento = TipoDeMovimento.Despesa,
                ValorAbsoluto = 500,
                Conta = conta1
            });

            var segundoLancamento = new Lancamento()
            {
                Categoria = contexto.Categorias.Find(1),
                DataDoLancamento = DateTime.Now,
                Nome = "TRANSFERÊNCIA DE VALORES ENTRE AS CONTAS  "
                + conta1 + " " + conta2 + " " + "Valor Recebido: " + 500
            };
            segundoLancamento.Movimentos.Add(new Movimento()
            {
                Lancamento = segundoLancamento,
                DataDoMovimento = DateTime.Now,
                TipoDeMovimento = TipoDeMovimento.Receita,
                ValorAbsoluto = 500,
                Conta = conta2
            });

            var transferencia = new TransferenciaEntreContas
            {
                ContaRemetente = conta1,
                ContaDestinataria = conta2,
                DataTransferencia = DateTime.Now,
                Valor = 500
            };
            var t1 = transferencia.TransferenciaSaida(contexto.Categorias.Find(1));
            var t2= transferencia.TransferenciaEntrada(contexto.Categorias.Find(1));
            
            Assert.AreEqual(t1,primeiroLancamento);
            Assert.AreEqual(t2, segundoLancamento);
            
        }
    }
}
